#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(1000);
    setWindowTitle(tr("Analog Clock"));
    resize(200, 200);

    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    static const QPoint hourHand[3] = {
        QPoint(7, 8),
        QPoint(-7, 8),
        QPoint(0, -40)
    };//用于绘制时针的三角形
    static const QPoint minuteHand[3] = {
        QPoint(7, 8),
        QPoint(-7, 8),
        QPoint(0, -60)
    };//用于绘制分针的三角形
    static const QPoint secondHand[3]={
        QPoint(7,8),
        QPoint(-7,8),
        QPoint(0,-90)
    };//用于绘制秒针的三角形

    QColor hourColor(127, 0, 127);
    QColor minuteColor(0, 127, 127, 191);
    //QColor::QColor(int r, int g, int b, int a = 255)a表示透明度
    QColor secondColor(220,20,60,100);
    //为每一个图形绘制颜色及透明度

    int side = qMin(width(), height());
    //我认为这一句的作用在于找到最小标出，用于坐标系的绘制

    QTime time = QTime::currentTime();
    qDebug()<<time<<'\n';//用于检验现在的时间

    QPainter painter(this);//Qt强大的画图工具
    painter.setRenderHint(QPainter::Antialiasing);// 用于反锯齿
    //针对所有的组件，都反锯齿//表示设置渲染提示

    painter.translate(width() / 2, height() / 2);//将原点放在中心
    painter.scale(side / 200.0, side / 200.0);//Scales the coordinate system by (sx, sy).标尺坐标系
    //Qt画板的x和y表示什么，x表示横线吗，y表示纵线吗？对的
    //说明横坐标的范围是-100到100
    //   纵坐标的范围是-100到100

    //时针：
    painter.setPen(Qt::NoPen);//一般用于描边，Qt::NoPen表示画笔没有边界
    painter.setBrush(hourColor);//一般用于填充

    //先将原先的painter存储起来，对目前的painter操作，目前的操作不对原本的产生影响，即原本不旋转
    painter.save();//首先将原先画笔类似于入栈，对另一个画笔操作
    painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));//表示旋转，若缺少painter.save(),会对整个painter类旋转
    painter.drawConvexPolygon(hourHand, 3);//绘制多边形
    painter.restore();//与painter.save()配套使用


    painter.setPen(hourColor);

    for (int i = 0; i < 12; ++i) {
        painter.drawLine(88, 0, 96, 0);
        painter.rotate(30.0);//画横线，表示时间示数的标尺
    }//分针和秒针同时针

    //分针：
    painter.setPen(Qt::NoPen);
    painter.setBrush(minuteColor);

    painter.save();
    painter.rotate(6.0 * (time.minute() + time.second() / 60.0));
    painter.drawConvexPolygon(minuteHand, 3);
    painter.restore();

    painter.setPen(minuteColor);
    for (int j = 0; j < 60; ++j) {
        if ((j % 5) != 0)
            painter.drawLine(92, 0, 96, 0);
        painter.rotate(6.0);
    }

    //时针：
    painter.setPen(Qt::NoPen);
    painter.setBrush(secondColor);

    painter.save();
    painter.rotate(6*time.second());
    painter.drawConvexPolygon(secondHand,3);
    painter.restore();



}
